# install.packages("tidyverse")Consumption-based asset pricing
(limits and extensions)
The Github repo of the first part of the course contains the html and Quarto notebooks for the code. All the academic references (paper) and many others can be accessed in the following zip file.
NOTE: The present notebook is coded with quarto, in the R programming language. The white margin to the right will be used to display code output.
This document relies heavily on the {tidyverse} ecosystem of packages. We load the tidyverse below as a prerequisite for the rest of the notebook - along with a few other important libraries.
To install packages, use the install.packages() function as below (commented on purpose).
Once they are installed, we can call/load/activate them in the current session.
library(tidyverse) # Package for data wrangling
library(readxl) # Package to import MS Excel files
library(latex2exp) # Package for LaTeX expressions
library(quantmod) # Package for stock data extraction\(\rightarrow\) Don’t forget that code flows sequentially. A random chunk may not work if the previous ones have have not been executed.
1 Outline of the course
Macroeconomics is a vast discipline. There are many valuable textbooks on the matter, but we take for instance the recent and excellent Advanced Macroeconomics - An Easy Guide (henceforth referred to as CSV2021). Its content is divided into the following sections:
- Growth Theory
- Growth theory preliminaries
- The neoclassical growth model
- An application: The small open economy
- Endogenous growth models I: Escaping diminishing returns
- Endogenous growth models II: Technological change
- Proximate and fundamental causes of growth
- Growth theory preliminaries
- Overlapping Generations Models
- Overlapping generations models
- An application: Pension systems and transitions
- Unified growth theory
- Overlapping generations models
- Consumption and Investment
- Consumption
- Consumption under uncertainty and macro finance
- Investment
- Consumption
- Short Term Fluctuations
- Real business cycles
- (New) Keynesian theories of fluctuations: A primer
- Unemployment
- Real business cycles
- Monetary and Fiscal Policy
- Fiscal policy I: Public debt and the effectiveness of fiscal policy
- Fiscal policy II: The long-run determinants of fiscal policy
- Monetary policy: An introduction
- Rules vs Discretion
- Recent debates in monetary policy
- New developments in monetary and fiscal policy
- Fiscal policy I: Public debt and the effectiveness of fiscal policy
Most of these themes may have been covered in introductory courses earlier.
The curriculum of the present offering seeks to dive into subjects that are less mainstream, hence its title: Topics in Financial Macroeconomics! The themes in green in the above list will be evoked in the present session.
- Consumption-based models (C-CAPM) and critiques
- Rare events and long-term risks
- Asset pricing with heterogeneous agents
- Degrowth and green financial models
- Equity premium prediction
- Introduction to commodities market: Physical and future markets
- Global asset allocation
- Nowcasting macroeconomic variable: the case of GDP
Below, we propose a list of references for the present session on the C-CAPM.
For generic asset pricing, the book Asset Pricing by Cochrane is a common choice.
Surveys:
- Consumption-Based Asset Pricing (Campbell - 2003).
- Advances in Consumption-Based Asset Pricing: Empirical Tests (Ludvigson - 2012)
- Consumption-Based Asset Pricing Models (Mehra - 2012)
Research articles:
- Resurrecting the (C)CAPM: A Cross‐Sectional Test When Risk Premia Are Time‐Varying (Lettau & Ludvigson - 2001)
- Explaining the Poor Performance of Consumption-based Asset Pricing Models (Campbell & Cochrane - 2002)
- Heterogeneity in Financial Market Participation: Appraising its Implications for the C-CAPM (Paiella - 2004)
- Consumption-Based Asset Pricing with Higher Cumulants (Martin - 2013)
- A New Test of Risk Factor Relevance (Chinco, Hartzmark & Sussman 2022)
2 Foundations and notations
Historical note: the consumption capital asset pricing model (C-CAPM) is routinely attributed to Breeden’s 1979 intertemporal asset pricing model with stochastic consumption and investment opportunities, but other contributions are close in spirit, e.g., Lucas’ 1978 Asset prices in an exchange economy.
2.1 The Euler equation
For simplicity, we follow here the notations of Cochrane, but we also point to other references along the way.
Time is discrete and denoted with \(t\). There is a unique (representative, aggregate) investor on the market who needs to decide on some consumption level \(c_t\) at time \(t\). His choice is entirely driven by a utility function \(u\) that operates on the consumption. We first consider a two-period model hence the time-\(t\) utility across these two periods is
\[U(c_t,c_{t+1})=u(c_t)+\beta \, \mathbb{E}_t[u(c_{t+1})],\] where \(\beta \in (0,1)\) is a discounting factor which reflects the fact that 1$ or 1€ today is worth more than the same amount in a future date (value depreciation as time passes). This comes from the fact that if I borrow or lend money, there will be a non-zero interest rate. Hence if I borrow 1$, I will have to reimburse slightly more in the future. Reversely, the value today of 1$ a year from now is lower than 1$. In addition, present utility or welfare is often considered more valuable than distant pleasure in the future.
In other books, e.g. CSV2021, authors sometimes use \(\beta=(1+\rho)^{-1}\). Moreover, \(\mathbb{E}_t[\cdot]\) is the expectation operator, conditionally on the information available at time \(t\).
Now, the investor is able to act on a financial market and by a risky asset at price \(p_t\). At time \(t+1\), the payoff \(x_{t+1}=p_{t+1}+d_{t+1}\) is equal to the future price plus potential dividends. She invests a quantity \(w\) (\(\xi\) in Cochrane) in this asset. A major question pertains to the optimal level of \(w\). Then,
- time-\(t\) consumption is equal to the original level (when financial markets are not available), \(e_t\), minus the investment in the market \(wp_t\);
- time-\(t+1\) consumption is \(e_{t+1}\) (baseline value) plus \(w x_{t+1}\) (proceedings of the financial investment).
- the baseline levels of consumption \(e_t\) and \(e_{t+1}\) do not matter here, they are silent variables.
We thus seek to maximize \(\, U(c_t,c_{t+1})=u(e_t-wp_t)+\beta \, \mathbb{E}_t[u(e_{t+1}+wx_{t+1})]\) with respect to \(w\). We thus differentiate the above expression with respect to \(w\) and equate to zero (first order condition): \[\frac{\partial U(c_t,c_{t+1})}{\partial w}= -p_t u'(c_t) +\beta \, \mathbb{E}_t[x_{t+1}u'(c_{t+1})]=0 \quad \Longleftrightarrow \quad p_t=\beta \,\mathbb{E}_t\left[ \frac{u'(c_{t+1})}{u'(c_t)}(p_{t+1}+d_{t+1})) \right]\]
where we have assumed that the conditions of the Leibniz rule are satisfied.
If we write the (gross) total return \(r_{t+1}=(p_{t+1}+d_{t+1})/p_t>0\), we get the Euler equation: \[\beta \,\mathbb{E}_t\left[ \frac{u'(c_{t+1})}{u'(c_t)}r_{t+1}\right]=1, \tag{1}\]
A similar representation can be found in The Valuation of Uncertain Income Streams and the Pricing of Options (Rubinstein - 1976).
Importantly, we can roll the expression by substituting \(p_{t+1}\) with its own value:
\[p_{t}=\beta \mathbb{E}_t \left[\frac{u'(c_{t+1})}{u'(c_t)} \left( \mathbb{E}_{t+1} \left[ \beta \frac{u'(c_{t+2})}{u'(c_{t+1})}(p_{t+2}+d_{t+2}) \right]+d_{t+1} \right) \right]\]
and, ultimately, using the Tower property of the conditional expectation, we obtain
\[p_t= \mathbb{E}_t \left[ \sum_{s=1}^\infty \beta^s \frac{u'(c_{t+s})}{u'(c_t)}d_{t+s} \right]. \tag{2}\]
In the Euler equation, there is an important term, the stochastic discount factor: \[m_{t+1}= \beta \frac{u'(c_{t+1})}{u'(c_t)}. \tag{3}\]
Several remarks:
- \(m_{t+1}\) is also sometimes called the pricing kernel because it can be used to price all assets!
- given its shape with the derivatives, in economics it is also referred to as the marginal rate of substitution: it is the rate at which the investor will be willing to trade consumption at time \(t+1\) with consumption at time \(t\).
- In compact form, we have \(\mathbb{E}_t[m_{t+1}r_{t+1}]=1\), which is the bedrock in consumption-based asset pricing. Though, to be honest, \(m_{t+1}\) remains somewhat a mystery and its characterization/estimation is a recurring challenge - whereas the \(r_{t+1}\) are directly observable.
2.3 The frontier and linear SDFs
We re-write Equation 5 as
\[\mathbb{E}_t[r^n_{t+1}]=r^f_{t+1}-\text{cor}_t(m_{t+1},r^n_{t+1})\frac{\sqrt{\mathbb{V}_t[m_{t+1}]\mathbb{V}_t[r^n_{t+1}]}}{\mathbb{E}_t[m_{t+1}]} \tag{7}\]
Below we show some implications of this equality. First, because correlations are smaller than one, we have that all assets can be represented in a wedge region (loosely written: \(|r^n-r^f|\le \sigma^n\sigma^m/r^m\)), as shown in the Figure below, taken from Cochrane’s Asset Pricing book.
In addition, the upper line corresponds to the efficient frontier and holds when the absolute correlation with \(m\) is equal to one. Hence, it is customary to assume a linear specification for the SDF: \[m_{t+1}=a+br^{mv}_{t+1}, \tag{8}\] where \(r^{mv}\) is the return of an asset on the mean-variance frontier and the constants \(a\) and \(b\) are determined by plugging \(r^{mv}_{t+1}\) and \(r^f_{t+1}\) in the pricing Equation 4 (see Exercise 3 in the Asset Pricing book).
The representation Equation 8 is very convenient but also somewhat restrictive. The C-CAPM, as well as the CAPM imply linear single factor models. We refer to Asset Pricing with Observable Stochastic Discount Factors for a survey on other forms of SDFs, especially in higher dimensions.
Note that this is somewhat of a magical twist! Indeed, the spirit of the C-CAPM is to price assets based on their exposure to consumption growth risk. But in the above model, the risk comes from the MV-portfolio…
In fact, it is also possible to model \(m_{t+1}\) as an affine function of consumption growth (see later on…). For instance, if we consider a quadratic utility function (\(u(x)=ax-bx^2\)), then \(u'(c_{t+1})/u'(c_t)=c_{t+1}/c_t\)! To be plugged in Equation 3…
3 Discussion & Extensions
3.1 Critiques
The purpose of economic models is to explain salient empirical facts. The empirical applications in the course are presented below. Before that, we dive into academic references that criticize the C-CAPM. There are several ways to test the model:
first, one major issue which we’ll address below is the level of risk aversion. Equation 6 links average returns to other quantities, especially linked to consumption growth. All terms are relatively easy to estimate, except risk aversion, which is used as a degree of freedom.
- Basically, if there is only one asset, we solve the equation where it is the unknown.
- If there are many assets, we can compute the mean squared error of the model, depending on levels of \(\gamma\) and seek the value that minimizes the error. This exercise is carried out in Euler equation errors and we provide the outcome below. The minimizing value for risk aversion is 117, which is unrealistically high (see Section 4.2 below for a benchmark).
Another angle of attack is the following, for which we follow Risk and Return- Consumption Beta Versus Market Beta. From Equation 4, we can decompose the average return in the following way by artificially inserting the market return \(M\): \(\mathbb{E}_t[r^n_{t+1}]=\frac{1}{\mathbb{E}_t[m_{t+1}]}- \frac{\text{cov}_t[R^M_{t+1},g_{t+1}]}{\mathbb{E}_t[m_{t+1}]} \times \frac{\text{cov}_t[R^n_{t+1},g_{t+1}]}{\text{cov}_t[R^M_{t+1},g_{t+1}]}\), and hence we can seek to estimate a model of the form \(r^n_t=a+bx^C_t+e_t,\) where \(x^C_t\) is a consumption-factor relying on the market return. Now, there is a similar model in finance, the simple CAPM, where \(x^M_t\) is simply the market return. In Risk and Return- Consumption Beta Versus Market Beta, the model is \(r_t=a+b_Cx^C_t+b_Mx_t^M+e_t\) in order to capture which factor matters the most. And it turns out that it’s the market factor, by far!
Evidence from the field is also pretty bad. In A New Test of Risk Factor Relevance, the authors find that when asking people about investment decisions, correlation between returns and consumption growth is not considered…
We will not follow this avenue below, hence it is worthwhile to mention that habit-based models have been proposed as solutions to these flaws, see for instance Explaining the Poor Performance of Consumption-Based Asset Pricing Models. The main departure is that utility is not derived from raw consumption, but from consumption above a particular habit level.
3.2 Alternative: production-based asset pricing
The C-CAPM relies on consumption as the driving state variable. But output (production) would be another choice. In fact, some papers sometimes choose to conveniently equate the two! Indeed, you can only consume what you produce (in a closed economy).
- Production-Based Asset Pricing and the Link Between Stock Returns and Economic Fluctuations
- Long-run productivity risk: A new hope for production-based asset pricing?
- Asset pricing in production economies with extrapolative expectations
Importantly, in this session, we examine the following question: can macroeconomic variables (such as aggregate consumption) help explain market fluctuations. The reverse question (do market returns drive economic growth?) has received little attention, but is briefly tested in the first paper mentioned in the above list.
The links between markets and growth are mostly studied through the lens of the financing liquidity that markets permit (as a booster to the real economy). We for instance refer to the surveys A survey of recent developments in the literature of finance and growth and Finance and growth - Theory and evidence.
Below, we follow Predicting Stock Returns in an Efficient Market, who propose more of a general equilibrium model than a pure production-focused one. It is compact, hence pleasant, a we outline it briefly.
- Firm and production. A representative firm produces some output at time \(t\), \(y_t\). Instantaneously, it divides this output between investment \(i_t\) (for future production) and dividends \(d_t\), paid to the shareholders. The investment becomes productive as capital \(k_{t+1}\) during the next period. Future production \(y_{t+1}\) depends on this factor (\(k_{t+1}\)), as well as on a random unit-mean productivity shock, \(\theta_{t+1}\): \(y_{t+1}\propto \theta_{t+1}k_{t+1}^\alpha\) for some \(\alpha \in (0,1)\). The supply of shares of the firms is fixed to 1. Dividends are proportional to output \(d_t \propto y_t\). This is assumed here to ease the exposition, but it comes from the solution of the firms’ dividend-maximizing objective. Likewise, time-\((t+1)\) investment/capital is proportional to \(y_t\). In the end, \[y_{t+1}= AB^t\theta_{t+1}k^\alpha_{t+1}=\gamma B^t\theta_{t+1}y_t \tag{9}\]
- Agent and consumption. The representative consumer maximizes \(u(c_t)+\beta \mathbb{E}_t[u(c_{t+1})]\) and for simplicity, \(u\) will later on be set to the log function. The maximization is subject to the budget constraint \(c_t+p_ts_{t+1}=(d_t+p_t)s_t\), where \(s_t\) is the amount invested (number of shares). Differentiating with respect to \(s_{t+1}\) gives the Euler equation: \[p_t u'(c_t)=\beta \mathbb{E}_t[(p_{t+1}+d_{t+1})u'(c_{t+1})].\] Iterating forward gives \[p_t=\mathbb{E}_t\left[\sum_{s=1}^\infty \beta^s(u'(c_{t+s})/u'(c_t))d_{t+s}\right]\]
- Simplifying assumptions. If we set a unit supply of shares \(s_t=1\) (implying \(d_t=c_t\)) and log utility, this all simplifies to \(p_t=\frac{\beta d_t}{1-\beta}\). To see this: all terms in time \(t+s\) vanish in the above sum. The total gross return is then \[R_{t+1}=\frac{p_{t+1}+d_{t+1}}{p_t}=\frac{d_{t+1}}{\beta d_t}=\frac{y_{t+1}}{\beta y_t},\] Where the second equality comes from the fact that dividends are proportional to output.
This gives a testable equation: \(\log(R_{t+1})=-\log(\beta)+\log(y_{t+1})-\log(y_t)\), and, substituting Equation 9 (roughly assuming \(y_t \approx y_{t+1}\)), we get a model of the form: \[r_{t+1}=\log(R_{t+1})=c +Bt+ b \log(y_t)+e_{t+1}, \quad \text{with} \quad b<0.\]
3.3 Alternative: higher order cumulants
In this section, we follow Consumption-Based Asset Pricing with Higher Cumulants. We go back to Equation 2. In the original paper, Epstein-Zin preferences are considered for the general model, but we follow the simpler exposition with CRRA preferences. In this case, starting at \(t=0\) for simplicity, \[p_0=\mathbb{E}\left[\sum_{t=1}^\infty e^{-\rho t}\left(\frac{c_t}{c_0}\right)^{-\gamma} d_t\right]\]
Now, as we have seen before, consumption often relates to the dividends that the agent receives, hence, we postulate that \(d_t=c_t^\lambda\) for some \(\lambda \ge 0\). A simplification occurs and if we assume that log consumption growth is i.i.d.:
\[p_0=c_0^\lambda \mathbb{E}\left[\sum_{t=1}^\infty e^{-\rho t}\left(\frac{c_t}{c_0}\right)^{\lambda-\gamma}\right]=d_0 \sum_{t=1}^\infty e^{-\rho t}\mathbb{E}\left[\left(\frac{c_t}{c_0}\right)^{\lambda-\gamma}\right]\]
and continuing…
\[p_0=d_0 \sum_{t=1}^\infty e^{-\rho t}\mathbb{E}\left[e^{(\lambda-\gamma )\log(c_t/c_0)}\right]=d_0 \sum_{t=1}^\infty e^{-\rho t}\mathbb{E}\left[e^{(\lambda-\gamma )\log(c_1/c_0)}\right]^t\]
Here \(g=c_1/c_0\) is consumption growth and has the same distribution across time (\(c_{t+1}/c_t\)). The trick is then to define the cumulant-generating function: \(c(\theta)=\log(\mathbb{E}[e^{\theta g}])\). We then have \[p_0=d_0\sum_{t=0}^\infty e^{-(\rho-c(\lambda-\gamma))t}=d_0\frac{e^{-(\rho-c(\lambda-\gamma))}}{1-e^{-(\rho-c(\lambda-\gamma))}}.\]
In particular, the log dividend yield is \(dy=\log(1+d_0/p_0)=\rho-c(\lambda-\gamma)\).
Note that if we take \(\lambda=0\) (constant dividend), this brings us to the case of a risk-free asset. Hence, the risk-free rate in the model is \(r_f=\rho-c(-\gamma)\).
For risky asset, because the price/dividend ratio is constant, the gross return is \[R_{t+1}=\frac{p_{t+1}+d_{t+1}}{p_t}=\frac{p_{t+1}}{p_t}\left(1+\frac{d_{t+1}}{p_{t+1}}\right)=\frac{d_{t+1}}{d_t}e^{\rho-c(\lambda-\gamma)} \]
and its average, by the link between consumption and dividends, is \[\mathbb{E}[R_{t+1}]=\mathbb{E}\left[\left( \frac{c_{t+1}}{c_t}\right)^\lambda\right]e^{\rho-c(\lambda-\gamma)}=e^{c(\lambda)+\rho-c(\lambda-\gamma)}\] and the risk premium is (subtracting \(r_f=\rho-c(-\gamma)\)): \(e^{c(\lambda)+c(-\gamma)-c(\lambda-\gamma)}\).
This approach is more flexible than the standard C-CAPM for an obvious reason: we have some latitude to choose the cumulant function. For instance when log-growth is driven by a jump diffusion (Brownian motion plus compound Poisson process). There is of course an example in the original paper:
3.4 Alternative: Epstein-Zin preferences
Here we follow Epstein-Zin 1991, with a bifurcation towards Asset Pricing with Observable Stochastic Discount Factors - Section 2.2.1 at the end. The core of the contribution is the utility function
\[U_t=\left( (1-\beta) c_t^{\rho}+\beta \mathbb{E}_t[U_{t+1}^\alpha]^{\rho / \alpha} \right)^{1/\rho},\]
where \(\beta\) is linked to time preferences (consume now versus enjoy higher expected utility tomorrow), \(\alpha\), to relative risk aversion over future utility and \(\rho\) to the elasticity of intertemporal substitution.1
The agent has access to financial markets with \(N\) assets, with gross returns (\(p_t/p_{t-1}\)) stacked in vector notation \(R_t\). She has a portfolio choice decision to make, ie, the allocation vector in these assets, again in vector notation \(w_t\) with \(1'w_t=1\) as budget constraint.
The wealth of the agent evolves as \(A_{t+1}=(A_t-c_t) \times w'_tR_{t+1}\): she invests what she does not consume. The Bellman equation is then
\[J(A_t)=\underset{c_t,w_t}{\max} \left\{ \left((1-\beta) c_t^\rho +\beta\mathbb{E}_t[J(A_{t+1})^\alpha]^{\rho/\alpha} \right)^{1/\rho} \right\} \tag{10}\]
Now, let’s assume the solution is linear in wealth: \(J(A_t)=\phi_t A_t\). Plugging \(A_{t+1}\), we must maximize consumption so that \[(1-\beta)c_t^\rho+\beta (A_t-c_t)^\rho \mathbb{E}[(\phi_{t+1}R^*_{t+1})^\alpha]^{\rho/\alpha},\] with \(R^*_{t+1}=w^*_tR_{t+1}\) the return of the optimal portfolio (to be determined later on).
The first order condition (FOC) with respect to \(c_t\):
\[\rho(1-\beta)c_t^{\rho-1}-\rho\beta(A_t-c_t)^{\rho-1} \mathbb{E}_t[( \phi_{t+1} R^*_{t+1})^\alpha]^{\rho/\alpha}=0.\] In addition, as is customary, let’s also assume that consumption is proportional to wealth \(c_t=\psi_tA_t\), and we get for \(\mu=\mathbb{E}_t[ (\phi_{t+1} R^*_{t+1})^\alpha]^{1/\alpha}\),
\[(1-\beta)\psi_t^{\rho-1}=\beta(1-\psi_t)^{\rho-1}\mu^\rho. \tag{11}\]
Going back to the original Bellman Equation 10, at the optimum,
\[(\phi_tA_t)^\rho=(1-\beta)(\psi_tA_t)^\rho+\beta (A_t(1-\psi_t))^\rho \mu^\rho.\]
Notice the common right terms between the above equation and Equation 11. So, plugging \((1-\psi_t)\) times Equation 11, we get
\[\phi_t=(1-\beta)^{1/\rho}\psi_t^{1-1/\rho}=(1-\beta)^{1/\rho}(c_t/A_t)^{1-1/\rho},\] a result slightly different from the original paper.
Now, Equation 11 implies (replacing \(\phi_{t+1}\) in \(\mu\) by its above value)
\[\frac{\beta}{1-\beta} \left(\frac{1-\psi_t}{\psi_t} \right)^{\rho-1}\mathbb{E}_t\left[(\phi_{t+1}R^*_{t+1})^\alpha \right]^{\rho/\alpha}=1=\left(\frac{A_t-c_t}{c_t} \right)^{\rho-1}\beta\mathbb{E}_t\left[ (\psi_{t+1}^{1-1/\rho}R^*_{t+1})^\alpha\right]^{\rho/\alpha}.\]
Note that by the law of motion of the wealth, \[\psi_{t+1}^{1-1/\rho}=(c_{t+1}/A_{t+1})^{1-1/\rho}=(c_{t+1}/((A_t-c_t)R^*_{t+1}))^{1-1/\rho},\]
hence thanks to the exponents, a major simplification occurs:
\[\mathbb{E}_t\left[ \beta \left(\frac{c_{t+1}}{c_t} \right)^{1-1/\rho} (R_{t+1}^*)^{\alpha/\rho} \right]=1,\]
which is a familiar form! The work is not over though, as we also need to derive the FOC with respect to \(w\) in Equation 10. We skip the details here and refer to the original derivations for more details on the matter (Equations (14)-(16) in Epstein-Zin 1991). In the end, we obtain \(N\) equations which have the following expression:
\[\mathbb{E}_t\left[\gamma_0\left(\frac{c_{t+1}}{c_t}\right)^{\gamma_1}(R^*_{t+1})^{\gamma_2}R_{j,t+1} \right]=1, \quad j=1,\dots,N,\] for some constants \(\gamma_0\), \(\gamma_1\) and \(\gamma_2\).
If all random (log) terms follow a multivariate Gaussian distribution function, then via the moment generating function \(\mathbb{E}[e^{\theta X}]=e^{\theta' \mu+(\theta'\Sigma\theta )/2}\), we obtain the level of the average risk free rate and subsequently that of the equity premium:
\[r_f=-\log(\gamma_0)-\frac{\gamma_1^2}{2}\sigma_{\Delta c}^2-\frac{\gamma_2^2}{2}\sigma^2_*-\gamma_1\mathbb{E}[\Delta c]-\gamma_2\mathbb{E}[r^*]-\gamma_1\gamma_2\sigma_{\Delta c,*,t}\]
\[\mathbb{E}_t[r_{j,t+1}]-r_f=-\frac{\sigma_{j,t}^2}{2}-\gamma_1 \sigma_{j,\Delta c,t}-\gamma_2\sigma_{j,r^*,t}, \tag{12}\] where \(\sigma_{j,x,t}\) is the conditional covariance between the return of asset \(j\) and variable \(x\) (note that \(\gamma_1\) and/or \(\gamma_2\) may be negative). Indeed, we have
\[\gamma_0\left(\frac{c_{t+1}}{c_t}\right)^{\gamma_1}(R^*_{t+1})^{\gamma_2}R_{j,t+1}= e^{\log(\gamma_0)+\gamma_1 \log(c_{t+1}/c_t)+\gamma_2 \log(R^*_{t+1})+\log(R_{j,t+1})} \]
hence the log of the expectation which is equal to zero, is also equal to the linear mean terms plus the variances \[\log(\gamma_0)+\gamma_1 \Delta c+ \gamma_2 r^*+r_j + \frac{\gamma_1^2}{2}\sigma^2_{\Delta c}+\frac{\gamma_2}{2}\sigma_{*,t}^2+\frac{1}{2}\sigma^2_{j,t}\] plus the cross-terms \[\gamma_1 \sigma_{j,\Delta c,t}+\gamma_2 \sigma_{j,r^*,t}+\gamma_1\gamma_2\sigma_{\Delta c,*,t}.\]
NOTE the shape of the SDF in this case is \[M_{t+1}=\gamma_0\left(\frac{c_{t+1}}{c_t}\right)^{\gamma_1}(R^*_{t+1})^{\gamma_2}= e^{\log(\gamma_0)+\gamma_1 \log(c_{t+1}/c_t)+\gamma_2 \log(R^*_{t+1})}\] This form will be used later on…
Via a first order Taylor expansion, the exponential expression is often linearized to \[\frac{e^{m_{t+1}}}{\mathbb{E}[e^{m_{t+1}}]}\approx 1+m_{t+1}-\mathbb{E}[m_{t+1}],\] i.e., \[\frac{M_{t+1}}{\mathbb{E}[M_{t+1}]} \approx b_0+b_1\log(c_{t+1}/c_t)+b_2 \log(R^*_{t+1}).\]
3.5 Alternative: conditional models
In Resurrecting the (C)CAPM- A Cross‐Sectional Test When Risk Premia Are Time‐Varying, the authors propose a variation of Equation 8 in which \(a\) and \(b\) is time-varying: \(m_{t+1}=a_t+b_tr^{mv}_{t+1}\). Of course, this expression is too general and they restrict the coefficients to linear functions of exogenous (predictive) variables \(z_t\). Hence, \[m_{t+1}=(\gamma_0+\gamma_1z_t)+ (\eta_0+\eta_1z_t)r^{mv}_{t+1},\] which is a multifactor model. In the original paper, the authors use the log consumption/wealth ratio for \(z_t\).
If we write \(m_{t+1}=c'F_{t+1}\), then from Equation 5, the excess return has the form
\[E[r^n_{t+1}-r^f_{t+1}]=a + \sum_{j=1}^Fb_if_{j,t+1}, \]
where the asset pricing factors \(f_{j,t+1}\) are covariances with the asset’s returns. In the original conditional C-CAPM paper, the authors rely on Fama-MacBeth regressions to test the superiority of conditioning with a exogenous variable (see below).
4 Empirical evidence
4.1 Data
4.1.1 Financial series
There are different sources from which we can fetch data for the equity premium:
Let’s have a look. Below, we download the data from the Five factor asset pricing model paper. It provides series for five factors.
#min_date <- "1980-01-01" # Starting date
min_date <- "1999-03-01" # Starting date
temp <- tempfile()
link <- "https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/F-F_Research_Data_5_Factors_2x3_CSV.zip"
download.file(link, temp, quiet = TRUE) # Download!
nb_factors <- 5 # Number of factors
FF_factors_US <- read_csv(unz(temp,
"F-F_Research_Data_5_Factors_2x3.csv"), # The file name
skip = 3) |> # Check the nb of lines to be skipped (could be 2!)
rename(Date = `...1`, MKT_RF = `Mkt-RF`) |> # Change name of 1st columns
mutate_at(vars(-Date), as.numeric) |> # Convert to number
mutate(Date = ymd(parse_date_time(Date, "%Y%m"))) |> # Date in right format
mutate(Date = rollback(Date + months(1))) # End of month date
FF_factors_US <- FF_factors_US |> mutate(MKT_RF = MKT_RF / 100, # Scaling returns
SMB = SMB / 100,
HML = HML / 100,
RMW = RMW / 100,
CMA = CMA / 100,
RF = RF / 100) |> # That's the risk-free rate
filter(Date >= min_date) # Keep the recent points
head(FF_factors_US) | Date | MKT_RF | SMB | HML | RMW | CMA | RF |
|---|---|---|---|---|---|---|
| 1999-03-31 | 0.0345 | -0.0423 | -0.0274 | -0.0407 | -0.0142 | 0.0043 |
| 1999-04-30 | 0.0433 | 0.0452 | 0.0246 | -0.0253 | 0.0089 | 0.0037 |
| 1999-05-31 | -0.0246 | 0.0371 | 0.0235 | 0.0093 | 0.0334 | 0.0034 |
| 1999-06-30 | 0.0477 | 0.0229 | -0.0319 | 0.0113 | -0.0321 | 0.0040 |
| 1999-07-31 | -0.0349 | 0.0257 | -0.0044 | 0.0036 | 0.0322 | 0.0038 |
| 1999-08-31 | -0.0138 | -0.0173 | -0.0187 | -0.0024 | 0.0064 | 0.0039 |
Here, we are only interested in the MKT_RF factor, which gives market returns minus the risk free rate, i.e., exactly the ingredient of the equity risk premium.
Now, let’s plot the cumulative returns.
library(plotly)
g <- FF_factors_US |>
mutate(cumret = cumsum(MKT_RF)) |>
ggplot(aes(x = Date, y = cumret)) + geom_line() +
theme_classic() +
theme(axis.title = element_blank(),
title = element_text(size = 8, face = "bold")) +
ggtitle("Cumulative market returns net of risk-free rate")
ggplotly(g)The fact that the curve increases so much is referred to as the equity premium puzzle because many standard models fail to provide growth rates that are compatible with the data.
4.1.2 Consumption
Next, we move to consumption data, which comes in many forms. The most important dichotomy is the durable versus nondurable goods.
We want to use the data from the FRED (Federal Reserve of Saint Louis). The R package {fredr} requires authentication. Hence we use direct queries instead. The series can be accessed via simple URLs of the type: https://fred.stlouisfed.org/series/PCE, which corresponds to Personal Consumption Expenditures. We also add the non-durable component to the data (PCEND).
Let’s have a look.
temp <- tempfile()
link <- "https://fred.stlouisfed.org/graph/fredgraph.xls?id=PCE"
download.file(link, temp, quiet = TRUE)
cons_data <- read_excel(temp, skip = 10)
link <- "https://fred.stlouisfed.org/graph/fredgraph.xls?id=PCEND"
download.file(link, temp, quiet = TRUE)
cons_data <- cons_data |>
left_join(read_excel(temp, skip = 10), by = "observation_date") |>
mutate(observation_date = observation_date - 1, # Last day of the month
observation_date = as.Date(observation_date)) |>
rename(date = observation_date) |>
filter(date > min_date)
cons_data |> head()| date | PCE | PCEND |
|---|---|---|
| 1999-03-31 | 6199.5 | 1414.3 |
| 1999-04-30 | 6232.1 | 1420.8 |
| 1999-05-31 | 6260.3 | 1419.7 |
| 1999-06-30 | 6287.6 | 1421.8 |
| 1999-07-31 | 6331.9 | 1439.3 |
| 1999-08-31 | 6386.5 | 1459.1 |
And plot the full PCE.
cons_data |>
pivot_longer(-date, names_to = "type", values_to = "cons") |>
ggplot() + geom_line(aes(x = date, y = cons, color = type)) +
theme_classic() + scale_y_log10() +
theme(axis.title = element_blank(),
legend.title = element_blank(),
legend.position = c(0.15,0.9),
title = element_text(size = 8, face = "bold")) +
ggtitle("Personal Consumption Expenditure in the US") +
scale_color_manual(values = c( "#1166BB", "#DD6611"))4.2 First analysis
Next, let us recall the formula that links average returns to average consumption growth in the case of CRRA preferences and Gaussian variables: \[\mathbb{E}_t[R_{t+1}]=\gamma \mathbb{E}_t[G_{t+1}]-\log(\beta)-\sigma_t^2/2,\] where \(\gamma\) is risk aversion, \(\beta\) is the discounting rate and \(\sigma_t^2\) is the variance of \(U_{t+1}=-\gamma G_{t+1}+ R_{t+1}\).
In this exercise, we wish to look at the effect of \(\gamma\). We fix \(\beta=0.998\), which corresponds to a realistic risk-free rate of approximately \(r=0.02\) and hence plausible for discounting purposes. It is also a value close to the ones estimated by Hansen & Singleton 1983. Below, we look at unconditional quantities, i.e., when taking the expectation of the above expression, which is much simpler.
beta <- 1-0.02/12
g_pce <- cons_data$PCE / lag(cons_data$PCE) # Full consumption
G_pce <- log(g_pce)[-1]
g_pcend <- cons_data$PCEND / lag(cons_data$PCEND) # Non durable consumption
G_pcend <- log(g_pcend)[-1]
r <- FF_factors_US$MKT_RF + FF_factors_US$RF + 1
R <- log(r)[-1]
test_function <- function(gamma, G, R, beta){
gamma * mean(G) - log(beta) - var(-gamma * G + R)/2
}
data.frame(gamma = seq(0.15, 5, by = 0.1)) |>
ggplot(aes(x = gamma)) +
geom_function(fun = test_function, aes(color= "Total Consumption"),
args = list(G = G_pce, R = R, beta = beta)) +
geom_function(fun = test_function, aes(color= "Non. Dur. Consumption"),
args = list(G = G_pcend, R = R, beta = beta)) +
scale_color_manual(values = c("#CC6611", "#DD1144")) +
geom_hline(yintercept = mean(R, na.rm = T), linetype = 2) +
geom_label(aes(x = 4, y = mean(R, na.rm = T)), label = "Average stock return", size = 3) +
theme_classic() + ylab("") + xlab(latex2exp::TeX("$\\gamma$")) +
theme(legend.position = c(0.3,0.9),
legend.title = element_blank()) +
ggtitle(latex2exp::TeX("Plot of $\\gamma \\rightarrow \\gamma E_t \\[G_{t+1}\\]-log(\\beta)-\\sigma_t^2/2$"))We see that for the model to work, we would need \(\gamma \approx 1.5\). For \(\gamma\), the estimates in Hansen & Singleton 1983 are all over the place (the coefficient is called \(\alpha=1-\gamma\) in our notations). But overall \(\gamma \approx 1.5\) is consistent with the average values they report.
For the record (to be used later on), we compute \(\sigma\) the standard deviation of consumption growth.
sd(G_pce, na.rm = T)[1] 0.01127287
sd(G_pcend, na.rm = T)[1] 0.01415483
As a comparison point, we produce below a plot from the paper Relative Risk Aversion- A Meta-Analysis, which compiles many values for the RRA (\(\gamma\)). The blue bars pertain to estimated values while the light grey ones to calibrated ones. 2 We see that a value of \(\gamma=2\) is reasonable. Hence, the simple calibration to the market returns is realistic.
Let us illustrate the impact of risk aversion for CRRA utilities.
crra <- function(x,a){
x^(1-a)/(1-a)
}
data_frame(x=c(1,5)) |>
ggplot(aes(x = x)) + theme_classic() + ylab("utility") +
geom_function(fun = crra, args = list(a = 2), aes(color = "a = 2")) +
geom_function(fun = crra, args = list(a = 3), aes(color = "a = 3")) +
geom_function(fun = crra, args = list(a = 4), aes(color = "a = 4")) +
theme(legend.position = c(0.7,0.3),
legend.title = element_blank())Simply put, a high aversion glues the utility to zero for large values of consumption.
NOTE: in Hansen & Singleton 1983, the authors assume that the vector \(Y_t=[X_t,R_t^{(1)},\dots, R_t^{(N)}]\) follows a special type of VAR(1) - first order auto-regressive vector. And the parameters of this process must also be estimated alongside \(\beta\) and \(\gamma\). This requires time-series that are long enough.
4.3 The cross-section of returns
But this is not the issue with the C-CAPM. The issue is with the cross-section of assets. Let us focus on stocks below. We download a few time-series of prices for large US corporations. The tickers are those of:
| AAPL (Apple, tech) | BA (Boeing, industry) | C (Citigroup, bank) |
| CVX (Chevron, energy) | DIS (Disney, entertainment) | F (Ford, industry) |
| GE (General Electric, misc) | MCD (McDonalds, catering) | MMC (Marsh & McLennan, consulting) |
| MSFT (Microsoft, tech) | NVDA (NVIDIA, tech) | PFE (Pfizer, heathcare) |
| WMT (Walmart, retail) | XOM (Exxon, energy) | SPY (S&P500 - index) |
We even fetch the data for the SPY, an exchange-traded fund that tracks (replicates the S&P500 - one of the most important financial indices in the US and in the world).
NOTE: to get more representative and robust results, we should be working with more (hundreds) of stocks.
NOTE: because of the auto.assign feature, the code will only be shown in the right margin (minor technical glitch!).
tickers <- c("AAPL", "BA", "C", "CVX", "DIS", "F", "GE", "MCD", "MMC",
"MSFT", "NVDA", "PFE", "WMT", "XOM", "SPY")
min_date <- "1999-03-01" # Starting date
max_date <- "2023-12-18" # Ending date => take a recent date!
prices <- getSymbols(tickers, src = 'yahoo', # Data from Yahoo Finance
from = min_date, # Start date
to = max_date, # End date
auto.assign = TRUE,
warnings = FALSE) %>%
map(~Ad(get(.))) %>% # Retrieving the data
reduce(merge) %>% # Merge in one dataframe
`colnames<-`(tickers) # Set the column names
prices |> head() # Have a look at the result! AAPL BA C CVX DIS F GE
1999-03-01 0.2554390 22.69917 169.1943 15.45154 26.56110 14.34456 109.3046
1999-03-02 0.2620619 22.09971 162.9791 15.37535 26.08424 14.03741 107.5449
1999-03-03 0.2587508 21.70008 159.8715 15.84513 26.32267 13.96061 106.9357
1999-03-04 0.2530738 22.29952 166.6047 16.11174 26.84722 14.34456 109.2179
1999-03-05 0.2511819 22.73913 170.5756 16.51803 27.32408 14.77460 112.6820
1999-03-08 0.2601699 22.25957 171.2662 16.46725 27.80094 14.75924 113.9045
MCD MMC MSFT NVDA PFE WMT XOM
1999-03-01 23.97713 20.23544 23.51988 0.4216439 18.33563 27.87892 15.15487
1999-03-02 24.89466 20.74705 23.02584 0.4180608 18.31841 27.73687 15.06769
1999-03-03 24.61766 20.95875 23.19053 0.3893937 18.12042 28.36586 15.27111
1999-03-04 24.96390 21.50566 23.59737 0.3810331 18.30120 29.01516 15.76514
1999-03-05 26.12381 21.89379 24.01391 0.4025329 18.80909 30.27317 16.20103
1999-03-08 25.06778 22.01728 24.64355 0.4085057 19.22229 30.33402 16.49163
SPY
1999-03-01 79.13190
1999-03-02 78.43338
1999-03-03 78.85246
1999-03-04 79.85034
1999-03-05 81.45696
1999-03-08 81.98584
rm(list = tickers) # Remove unnecessary variables from the env.Then, we compute the monthly returns.
returns <- prices %>% # Start from prices
to.monthly(indexAt = "lastof", OHLC = FALSE) %>% # Convert to monthly
data.frame(Date = index(.)) %>% # Convert the index to a date
remove_rownames() %>% # Remove index => converted into row names
pivot_longer(-Date, names_to = "Asset",
values_to = "Price") %>% # Put the data in 'tidy' format
group_by(Asset) %>% # Group the rows by asset to compute returns
mutate(returns = Price / dplyr::lag(Price) - 1, # Compute the returns
returns = returns |> round(4)) %>% # To ease presentation
select(-Price) %>% # Remove price column
pivot_wider(names_from = "Asset",
values_from = "returns") %>% # Put the data back in matrix form
select(all_of(c("Date", tickers))) %>% # Keep only the relevant columns
na.omit() # Discard rows with missing/NA data
returns <- returns[1:length(G_pce),] # Crop to match size of consump data
head(returns) # Again, show the result!| Date | AAPL | BA | C | CVX | DIS | F | GE | MCD | MMC | MSFT | NVDA | PFE | WMT | XOM | SPY |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1999-04-30 | 0.2800 | 0.1949 | 0.1755 | 0.1239 | 0.0201 | 0.1360 | -0.0475 | -0.0648 | 0.0368 | -0.0927 | -0.1361 | -0.1707 | -0.0020 | 0.1771 | 0.0380 |
| 1999-05-31 | -0.0421 | 0.0387 | -0.1152 | -0.0667 | -0.0827 | -0.1065 | -0.0350 | -0.0903 | -0.0498 | -0.0077 | -0.0651 | -0.0683 | -0.0734 | -0.0336 | -0.0229 |
| 1999-06-30 | 0.0511 | 0.0461 | 0.0755 | 0.0277 | 0.0579 | -0.0120 | 0.1112 | 0.0682 | 0.0404 | 0.1177 | 0.1209 | 0.0187 | 0.1333 | -0.0344 | 0.0554 |
| 1999-07-31 | 0.2024 | 0.0312 | -0.0591 | -0.0401 | -0.1055 | -0.1332 | -0.0324 | 0.0137 | 0.0098 | -0.0485 | 0.0523 | -0.0677 | -0.1244 | 0.0292 | -0.0310 |
| 1999-08-31 | 0.1717 | 0.0017 | -0.0028 | 0.0182 | 0.0068 | 0.0747 | 0.0304 | -0.0063 | -0.0419 | 0.0787 | 0.3975 | 0.1170 | 0.0488 | -0.0013 | -0.0052 |
| 1999-09-30 | -0.0297 | -0.0593 | -0.0098 | -0.0386 | -0.0631 | -0.0360 | 0.0587 | 0.0453 | -0.0592 | -0.0216 | -0.3156 | -0.0497 | 0.0745 | -0.0365 | -0.0223 |
So now to the heart of the problem. And there are several ways to proceed. Either, take all the data and estimate \(\gamma\) and \(\beta\) in Equation 6 thanks to several stock points. In this case, the VAR model mentioned above is larger. And then see if the restricted model (because it must satisfy more constraints due to more assets) yields results similar to the original one, via a likelihood ratio test. In Hansen & Singleton 1983, the tests argue against the C-CAPM.
Let’s take a simpler route here and look at the sequence of unconditional quantities from Equation 12 and fit a simple linear model on
\[\mu^{(n)}+(\sigma^{(n)})^2/2= a + b_1\text{cov}(r^{(n)},\Delta c) + b_2\text{cov}(r^{(n)},r^{(*)}) + e^{(n)},\]
We add a constant for the sake of curiosity. In the theoretical formulation, there is none.
An important paper for cross-section-based tests is Risk, Return, and Equilibrium: Empirical Tests, often referred to as “Fama-MacBeth”, the names of the authors. Imagine we seek to test the relationship: \(\mathbb{E}[r^{(n)}-r^f]=\beta^{(n)}\mathbb{E}[r^{(M)}-r^f]\), where we sometimes confuse \(r^{(M)}\) with \(r^*\), i.e., the market versus the optimal return. In some models, they are supposed to be the same. In fact, this term can be replaced by any factor that either seems reasonable or stems from a theoretical equilibrium model: \(\bar{r}^n=a+\beta \bar{f}+e\) - and in fact the factor can be of higher dimension.
The problem is that the equation has only unknowns: expected returns and loadings \(\beta^{(n)}\) - whereas we only observe realized returns. Fama & Macbeth first start by estimating the loadings \(\hat{\beta}^{(n)}\) via time-series regressions involving realized excess returns: \(r_t^{(n)}=a^{(n)}+\beta^{(n)} f_t+e^{(n)}_t\) for all \(n\) (asset-by-asset). Then, for each time period \(t\), they regress \[r_t^{(n)}=\alpha_t +\gamma_t \hat{\beta}^{(n)}+\epsilon_{t}.\] This generates a time-series of \(\hat{\gamma}_t\) which are the local estimated premia for the factors. It is then possible to test if they are non-zero or positive. If they are statistically significantly non-zero, then it is customary to say that the factor is “priced”. In addition, if returns are fully spanned by the betas, then the average pricing error \(\mathbb{E}[\alpha]=T^{-1}\sum_{t=1}^T\alpha_t\) should be zero.
NOTE: technically, using estimates in the second pass generates an “error-in-variable” problem; see On the Estimation of Beta-Pricing Models. Moreover, autocorrelation in residuals can be handled with non iid estimates for the standard errors (see Newey-West (1987) and Andrews (1991)).
We prepare the data for the regression.
mu <- colMeans(returns |> select(-Date)) # Mean of returns
mu <- mu - mu[length(mu)] # Subtract the market return
sigma <- apply(returns |> select(-Date), # Vol of returns
2,
sd)
mu <- mu+sigma^2/2 # Dependent variable
data_reg <- returns |>
bind_cols(delta_G = G_pce) |>
pivot_longer(AAPL:XOM, names_to = "ticker", values_to = "return") |>
group_by(ticker) |>
summarise(cov_market = cov(return, SPY),
cov_cons_g = cov(return, delta_G)) |>
bind_cols(exp_return = mu[-length(sigma)])
data_reg[1:3,]| ticker | cov_market | cov_cons_g | exp_return |
|---|---|---|---|
| AAPL | 0.0027503 | 0.0001814 | 0.0289271 |
| BA | 0.0022808 | 0.0002827 | 0.0098681 |
| C | 0.0035089 | 0.0003073 | 0.0025071 |
library(ggrepel) # This is to show neat labels
data_reg |>
ggplot(aes(x = exp_return, y = cov_market)) +
geom_smooth(method = "lm", level = 0., size = 0.5) + geom_point() +
geom_text_repel(aes(label = ticker), size = 2) +
theme_classic() + xlab("expected returns") +
ylab("covariance with the market")The link seems positive, but driven by a few outlying points mainly (F, AAPL, NVDA)…
Now to the model:
library(sjPlot) # This package is for neat regression outputs
lm(exp_return ~ cov_market + cov_cons_g,
data = data_reg) |> tab_model()| exp return | |||
| Predictors | Estimates | CI | p |
| (Intercept) | -0.00 | -0.02 – 0.01 | 0.589 |
| cov market | 11.05 | 4.70 – 17.39 | 0.003 |
| cov cons g | -60.88 | -123.07 – 1.30 | 0.054 |
| Observations | 14 | ||
| R2 / R2 adjusted | 0.589 / 0.514 | ||
The result is not too bad! The intercept is virtually zero and the two independent variables seem to have some explanatory power over the cross-section of vol-corrected returns. Hence, even unconditionally, the model is not too far-fetched (with a relatively high \(R^2\)).
lm(exp_return ~ cov_market + cov_cons_g - 1,
data = data_reg) |> tab_model()| exp return | |||
| Predictors | Estimates | CI | p |
| cov market | 9.97 | 5.44 – 14.51 | <0.001 |
| cov cons g | -67.62 | -121.63 – -13.61 | 0.018 |
| Observations | 14 | ||
| R2 / R2 adjusted | 0.730 / 0.685 | ||
It’s almost even better without the intercept.
This is only preliminary work, and a better characterization of the model’s ability to price returns correctly would actually work on estimates of conditional returns, like in the Fama-Macbeth tests.
4.4 Cumulants
Now let us have a look at the cumulant specification for the risk premium: \(rp=e^{c(\lambda)+c(-\gamma)-c(\lambda-\gamma)}\), with \(c(\theta)=\log(\mathbb{E}[e^{\theta g}])\). Note that there are two degrees of freedom: the risk aversion \(\gamma\) and the dividend-consumption link \(\lambda\) from \(d_t=c_t^\lambda\). The discount rate \(\rho\) is absent in the formula.
Let us have a look at the cumulant function for consumption log-growth.
cumul <- function(theta, x){
theta <- matrix(theta, ncol = 1)
x <- matrix(x, ncol = 1)
log(rowMeans(exp(theta %*% t(x)), na.rm = T))
}
tibble(theta = c(-30,10)) |>
ggplot(aes(x = theta)) + xlab(latex2exp::TeX("$\\theta$")) +
theme_classic() + ylab(latex2exp::TeX("$c(\\theta)$")) +
geom_vline(xintercept = 0, linetype = 2, color = "#999999", linewidth = 0.2) +
geom_function(fun = cumul, args = list(x = G_pce)) +
geom_hline(yintercept = 0, linetype = 2, color = "#999999", linewidth = 0.2)This is the actual, data-driven, curve. In the original paper, Martin shows that depending on the ex-ante inclusion of jumps, the shape can change a lot.
Now, let us plot the function \(e^{c(\lambda)+\rho-c(\lambda-\gamma)}\) for several reasonable values of \(\lambda\) (color) and \(\gamma\) (\(x\)-axis). We compare with a reasonable value for the risk premium of \(0.06/12=0.005\).
premium <- function(gamma, lambda, x){
exp(cumul(lambda, x) + cumul(-gamma,x) - cumul(lambda-gamma, x)) - 1
}
tibble(gamma = c(0,20)) |>
ggplot(aes(x = gamma)) + xlab(latex2exp::TeX("$\\gamma$")) +
theme_classic() + ylab(latex2exp::TeX("$rp(\\gamma)$")) +
geom_hline(yintercept = 0.005) +
geom_vline(xintercept = 0, linetype = 2, color = "#999999", linewidth = 0.2) +
annotate("text", x = 3, y = 0.0055, label = "risk premium", fontface = 2) +
theme(legend.position = c(0.55,0.85),
legend.title = element_text(face = "bold")) +
geom_function(fun = premium, args = list(lambda = 0.5, x = G_pce), aes(color = "lambda = 0.5")) +
geom_function(fun = premium, args = list(lambda = 1.0, x = G_pce), aes(color = "lambda = 1.0")) +
geom_function(fun = premium, args = list(lambda = 1.5, x = G_pce), aes(color = "lambda = 1.5")) +
geom_function(fun = premium, args = list(lambda = 2.0, x = G_pce), aes(color = "lambda = 2.0")) +
geom_hline(yintercept = 0, linetype = 2, color = "#999999", linewidth = 0.2)We see that reaching the sought level requires relatively large values of \(\lambda\) and \(\gamma\). \(\lambda >1\) corresponds to assets with levered claims, which is not necessarily suited to simple stocks. Hence, for \(\lambda=1\) (consumption equals dividends), the require risk aversion is \(\gamma=20\), which is somewhat large.
5 Conclusion
Asset pricing models that rely on aggregate consumption form a rich family. Their empirical relevance depends on the way they are specified and on what is tested.
Footnotes
EIS in this context is \(EIS=\left|\frac{\partial \log(c_t/c_{t+1})}{\partial \log \frac{\partial U/\partial c_t}{\partial U/\partial c_{t+1}}} \right|=(1-\rho)^{-1}\) with \(U=((1-\beta)c_t^\rho+\beta c_{t+1}^\rho)^{1/\rho}\).↩︎
The difference between estimation and calibration is not obvious. Estimation requires the definition of an estimator (OLS, ML or GMM) and incorporates the notion of randomness. Calibration is more heuristic. For instance, we calibrate an option pricing model to fit the market data, i.e., to minimize some error function on option prices or implied volatilities. Sometimes, calibration requires fixing parameters to “reasonable” values.↩︎